import axios from 'axios';
import { ElMessage } from 'element-plus';
import { useUserStore } from '@/stores/user';
import router from '@/router';

// 获取当前环境
const isDevelopment = import.meta.env.VITE_ENV === 'development';
console.log('当前环境:', import.meta.env.VITE_ENV);
console.log('API基础URL:', import.meta.env.VITE_API_BASE_URL);

// 创建axios实例
const api = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL,
  timeout: 15000,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 添加重试配置
const MAX_RETRIES = 2;
const retryDelay = (retryCount) => {
  return retryCount * 1000; // 1秒, 2秒, ...
};

// 添加调试日志
if (isDevelopment) {
  api.interceptors.request.use(config => {
    console.log('API请求:', config.method.toUpperCase(), config.url, config.data || config.params);
    return config;
  });
}

// 请求拦截器
api.interceptors.request.use(
  config => {
    // 从localStorage获取token
    const token = localStorage.getItem('token');
    
    // 如果token存在，则添加到请求头
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }
    
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  response => {
    // 在开发环境下添加日志
    if (isDevelopment) {
      console.log('API响应:', response.status, response.data);
    }
    
    // 对于所有HTTP成功的响应，直接返回数据
    console.log('响应拦截器 - 成功:', response);
    
    // 确保返回的数据不为空且格式正确
    if (!response || !response.data) {
      console.error('服务器返回了空数据');
      return { code: 500, message: '服务器返回了空数据', data: null };
    }
    
    // 直接返回后端的响应数据，包括错误情况（如code: 401）
    return response.data;
  },
  error => {
    // 在开发环境下添加日志
    if (isDevelopment) {
      console.error('API错误:', error);
    }
    
    console.error('响应拦截器 - 错误:', error);
    
    // 处理响应错误
    if (error.response) {
      const { status, data } = error.response;
      
      // 处理401未授权错误（token过期或无效）
      if (status === 401) {
        // 使用函数形式获取store，避免在模块初始化时就访问store
        const handleUnauthorized = () => {
          const userStore = useUserStore();
          
          // 清除用户登录状态
          userStore.logout();
          
          // 获取当前路由路径，用于登录后重定向
          const currentPath = router.currentRoute.value.fullPath;
          
          // 显示提示消息并重定向到登录页
          ElMessage.error('登录已过期，请重新登录');
          
          // 重定向到登录页，并传递原目标路径
          router.push({
            name: 'Login',
            query: { redirect: currentPath !== '/login' ? currentPath : '/' }
          });
        };
        
        // 执行未授权处理
        handleUnauthorized();
      }
      
      // 返回错误信息
      return Promise.reject(data || error);
    } else if (error.request) {
      // 请求已发送但没有收到响应
      console.error('没有收到响应:', error.request);
      return {
        code: 503,
        message: '服务器无响应，请检查网络连接',
        data: null
      };
    } else {
      // 请求配置出错
      console.error('请求配置错误:', error.message);
      return {
        code: 400,
        message: error.message || '请求配置错误',
        data: null
      };
    }
  }
);

// 登录
export const login = (data) => {
  return api.post('/auth/login', data);
};

// 注册
export const register = (data) => {
  return api.post('/auth/register', data);
};

// 获取当前用户信息
export const getCurrentUser = () => {
  return api.get('/user/info');
};

export default api; 